package edu.scu.declaresys.util;

import java.util.ArrayList;
import java.util.List;

import org.displaytag.pagination.PaginatedList;
import org.displaytag.properties.SortOrderEnum;


/**
 * 分页列表
 * 
 * <pre>
 * 当从数据查出的数据很多的时候，需要进行分页
 * </pre>
 * 
 * @author XoriieInpottn
 * @since 2012-7-22
 * @param <E>
 */
public class PageList<E> extends ArrayList<E> implements PaginatedList
{
	private static final long serialVersionUID = 4911232881160845798L;
	//
	// 分页信息
	//
	/**
	 * 总的数据记录条数
	 */
	private int dataAmt = 0;
	/**
	 * 总的页数
	 */
	private int pageAmt = 0;
	/**
	 * 每页的数据记录条数
	 */
	private int amtPerPage = 0;
	/**
	 * 当前的页码
	 */
	private int crtPageNum = 0;
	
	//
	//
	//
	public PageList()
	{
	}
	
	/**
	 * 按照指定的大小初始化
	 * 
	 * <pre>
	 * 和 ArrayList的构造一样，如果初始大小合适的话，效率会高些
	 * </pre>
	 * 
	 * @param iInitSize
	 */
	public PageList(int iInitSize)
	{
		super(iInitSize);
	}
	
	public PageList(List<E> list)
	{
		super(list);
	}

	public int getDataAmt()
	{
		return dataAmt;
	}

	/**
	 * 将更新总页数
	 *@param dataAmt
	 */
	public void setDataAmt(int dataAmt)
	{
		if(amtPerPage != 0)
		{
			pageAmt = (dataAmt / amtPerPage) + ((dataAmt % amtPerPage == 0) ? 0 : 1); 
		}		
		this.dataAmt = dataAmt;
	}

	public int getPageAmt()
	{
		return pageAmt;
	}

	public void setPageAmt(int pageAmt)
	{
		this.pageAmt = pageAmt;
	}

	public int getAmtPerPage()
	{
		return amtPerPage;
	}

	public void setAmtPerPage(int amtPerPage)
	{
		this.amtPerPage = amtPerPage;
	}

	public int getCrtPageNum()
	{
		return crtPageNum;
	}

	public void setCrtPageNum(int crtPageNum)
	{
		this.crtPageNum = crtPageNum;
	}

	@Override
	public int getFullListSize()
	{
		return dataAmt;
	}

	@Override
	public List<E> getList()
	{
		return this;
	}

	@Override
	public int getObjectsPerPage()
	{
		return amtPerPage;
	}

	@Override
	public int getPageNumber()
	{
		return crtPageNum;
	}

	@Override
	public String getSearchId()
	{
		return null;
	}

	@Override
	public String getSortCriterion()
	{
		return null;
	}

	@Override
	public SortOrderEnum getSortDirection()
	{
		return null;
	}

	
}
